package com.kxn.multi.module.service.service.impl;

import com.kxn.multi.module.service.entity.AdminPermission;
import com.kxn.multi.module.service.mapper.AdminPermissionMapper;
import com.kxn.multi.module.service.service.AdminPermissionService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.kxn.multi.module.service.util.PageUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;
import com.kxn.multi.module.common.exception.ServiceException;

/**
* <p>
* 权限表 服务实现类
* </p>
*
* @author kxn
* @since 2023-04-18
*/
@Service
public class AdminPermissionServiceImpl extends ServiceImpl<AdminPermissionMapper, AdminPermission> implements AdminPermissionService {

    @Autowired
    private PageUtil pageUtil;

    /**
    * 权限表分页列表
    * @param param 根据需要进行传值
    * @return
    */
    @Override
    public IPage<AdminPermission> page(AdminPermission param) {

        QueryWrapper<AdminPermission> queryWrapper = new QueryWrapper<>();
        queryWrapper.lambda()
        // 父id
                .eq(param.getParentId() != null, AdminPermission::getParentId, param.getParentId())
            // 权限父节点路径，如：/1/3,标识父节点为3，祖先节点1
                .eq(!StringUtils.isEmpty(param.getPath()), AdminPermission::getPath, param.getPath())
            // 名称（目录、菜单或者操作等）
                .eq(!StringUtils.isEmpty(param.getName()), AdminPermission::getName, param.getName())
            // 类型，1目录，2菜单，3接口，4页面元素（按钮等）
                .eq(param.getType() != null, AdminPermission::getType, param.getType())
            // 地址
                .eq(!StringUtils.isEmpty(param.getUrl()), AdminPermission::getUrl, param.getUrl())
            // svg图标名称
                .eq(!StringUtils.isEmpty(param.getIcon()), AdminPermission::getIcon, param.getIcon())
            // 是否展示，1展示，0隐藏
                .eq(param.getIsShow() != null, AdminPermission::getIsShow, param.getIsShow())
            // 排序(正序)
                .eq(param.getOrderNum() != null, AdminPermission::getOrderNum, param.getOrderNum())
            // 状态，1正常，0禁用
                .eq(param.getStatus() != null, AdminPermission::getStatus, param.getStatus())
    ;

        IPage<AdminPermission> page = page(pageUtil.page(), queryWrapper);
        return page;
    }

    /**
    * 权限表详情
    * @param id
    * @return
    */
    @Override
    public AdminPermission detail(Long id) {
        return getById(id);
    }

    /**
    * 权限表新增
    * @param param 根据需要进行传值
    * @return
    */
    @Override
    public void create(AdminPermission param) {
        if (!save(param)) {
            throw new ServiceException("添加数据失败");
        }
    }

    /**
    * 权限表修改
    * @param param 根据需要进行传值
    * @return
    */
    @Override
    public void update(AdminPermission param) {
        if (!updateById(param)) {
            throw new ServiceException("更新数据失败");
        }
    }

    /**
    * 权限表修改
    * @param id 主键id
    * @param param 根据需要进行传值
    * @return
    */
    public void updateById(Long id, AdminPermission param) {
        AdminPermission data = this.detail(id);
        if (data == null) {
            throw new ServiceException("数据不存在");
        }
        param.setId(id);
        update(param);
    }

    /**
    * 权限表删除(单个条目)
    * @param id
    * @return
    */
    @Override
    public void delete(Long id) {
        removeById(id);
    }

    /**
    * 权限表删除(多个条目)
    * @param ids
    * @return
    */
    @Override
    public void batchDelete(List<Long> ids) {
        removeByIds(ids);
    }
}
